import mysql.connector
from docx import Document

# 数据库连接配置
db_config = {
    'host': 'localhost',
    'port': 3306,  # 端口通常是整数类型
    'user': 'root',
    'password': 'root',
    'database': 'db_boot_tutor'
}

# 连接到数据库
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()

# 获取所有表名
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()

# 创建 Word 文档
doc = Document()

# 遍历每个表，生成表结构并添加到文档
for table in tables:
    table_name = table[0]

    # 为每个表添加一个标题
    doc.add_heading(f'{table_name} 数据库表结构', level=1)

    # 查询表结构信息
    cursor.execute(f"DESCRIBE {table_name}")
    columns = cursor.fetchall()

    # 创建表格：表头和列名
    table = doc.add_table(rows=1, cols=6)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = '序号'
    hdr_cells[1].text = '列名'
    hdr_cells[2].text = '数据类型'
    hdr_cells[3].text = '长度'
    hdr_cells[4].text = '说明'
    hdr_cells[5].text = '允许空'

    # 添加每一列的信息
    for index, column in enumerate(columns, start=1):
        row_cells = table.add_row().cells
        row_cells[0].text = str(index)  # 序号
        row_cells[1].text = column[0]  # 列名
        row_cells[2].text = column[1]  # 数据类型
        row_cells[3].text = column[1].split('(')[-1].split(')')[0] if '(' in column[1] else ''  # 长度
        row_cells[4].text = ''  # 说明，可以根据需要手动添加
        row_cells[5].text = 'YES' if column[2] == 'YES' else 'NO'  # 是否允许为空

    # 在表格后添加一个分页符
    doc.add_paragraph('\n')  # 添加空行，避免表格之间太紧

# 保存 Word 文件
word_filename = 'database_structure.docx'
doc.save(word_filename)
print(f"Word 文件已生成：{word_filename}")

# 关闭数据库连接
cursor.close()
conn.close()
